import type { z } from 'zod';

// 字段类型枚举
export type FieldType
  = | 'text'
    | 'email'
    | 'password'
    | 'number'
    | 'tel'
    | 'url'
    | 'textarea'
    | 'select'
    | 'radio'
    | 'checkbox'
    | 'switch'
    | 'date'
    | 'datetime'
    | 'time'
    | 'file-upload'
    | 'avatar-upload';

// 选择项类型
export interface SelectOption {
  /**
   * 标签
   */
  label: string;
  /**
   * 值
   */
  value: string | number | boolean;
  /**
   * 是否禁用
   */
  disabled?: boolean;
}

// 表单字段配置
export interface FormFieldConfig {
  /**
   * 字段名称
   */
  name: string;
  /**
   * 字段类型
   */
  type: FieldType;
  /**
   * 字段标签
   */
  label: string;
  /**
   * 字段占位符
   */
  placeholder?: string;
  /**
   * 是否必填
   */
  required?: boolean;
  /**
   * 是否禁用
   */
  disabled?: boolean;
  /**
   * 是否只读
   */
  readonly?: boolean;
  /**
   * 帮助文本
   */
  helpText?: string;
  /**
   * 验证规则
   */
  validation?: z.ZodTypeAny;
  /**
   * 选项
   */
  options?: SelectOption[];
  /**
   * 属性
   */
  props?: Record<string, any>;
  /**
   * 栅格布局
   */
  grid?: {
    cols?: number;
    span?: number;
  };
  /**
   * 条件渲染
   */
  conditional?: {
    field: string;
    value: any;
    operator?: 'eq' | 'ne' | 'gt' | 'lt' | 'gte' | 'lte' | 'in' | 'notIn';
  };
}

// 表单配置
export interface FormConfig {
  /**
   * 字段配置
   */
  fields: FormFieldConfig[];
  /**
   * 布局配置
   */
  layout?: {
    columns?: number;
    spacing?: string;
  };
  /**
   * 提交按钮配置
   */
  submitButton?: {
    text?: string;
    loading?: boolean;
  };
  /**
   * 取消按钮配置
   */
  cancelButton?: {
    text?: string;
    show?: boolean;
  };
}

// 表单 Schema 类型
export interface FormSchema {
  /**
   * 表单配置
   */
  config: FormConfig;
  /**
   * 验证规则
   */
  validationSchema: z.ZodObject<any>;
  /**
   * 初始值
   */
  initialValues?: Record<string, any>;
}
